<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //1.3在函数原型上添加我们的myApply,apply传入的是一个数租，所以第二个参数为数租，用rest展开
        Function.prototype.myApply=function(context,[...args]){
            //1.4判断第一个参数数据类型，如果为null，undefined、返回window
            if (context===null||context===undefined) {
                return window
            }
            //1.5判断是否为对象和函数，不是就将其包装成对象
            if (typeof context!=='object'&&typeof context!=='function') {
                context=Object(context)
            }
            //1.6声明一个唯一值Symbol数据类型
            const sy1=Symbol('sy1')
            //1.7这个时候的this，是fn，为context添加fn方法
            context[sy1]=this
            //1.8调用context里的fn，并把参数用rest展开
            const re = context[sy1](...args)
            //1.9删除属性，不改变原对象
            delete context[sy1]
            //返回2.0
            return re
        }
        //1.创建一个函数
        function fn(a,b) {
            console.log(a+b);
        }
        //1.1调用myApply
        console.log(fn.myApply({},[1,2]))
    </script>
</body>
</html>